1. Field of the Invention
The field of the present invention relates to methods and systems for managing software composition in a component-based software system.
2. Background
Computer systems continue to grow in complexity due to the proliferation of heterogeneous application programs, software tools, external services, and data repositories. In an enterprise environment, system resources and data are often widely distributed and can be moved from time to time to different directories, structures, or machines, or otherwise converted, replaced or modified. The heterogeneous nature of system components, their differing interfaces and data structures, their fragmentation across an enterprise, and their dynamic nature can lead to problems with, among other things, developing new applications, maintaining existing applications, and making optimal use of system resources.
Applications often need to share data, interoperate, and accommodate overlapping processes. Effective interoperation between applications generally requires the ability to share information including complex data found in unstructured or loosely structured formats, such as spreadsheets, images, and audio-visual data. Sharing information, however, may require execution of complex operations including conversion of documents and spreadsheets, encoding of media, encryption for secure storage and/or transmission, data compression, and other such tasks. These operations can involve many tools from different vendors and tend to be computationally intensive, thus requiring adequate resource management to achieve optimal performance.
Unfortunately for system programmers and users, most software applications are designed and built as standalone products without much thought given to their interoperability with other applications. Programmers and users are thus typically left to awkward manual techniques for attempting to integrate the functionality of disparate system components.
Efficiently developing and deploying applications in contexts that involve multiple tools, disparate data repositories, and external services is a significant challenge and an unsolved problem. Organizations often need to bring together distributed resources—which may be referred to as software components—into a seamless application in order to achieve automation of more complex software processes. Organizations lacking distributed applications typically must employ numerous, inefficient manual processes to bridge the gap between standalone applications.
Development and maintenance of distributed applications is made difficult in view of dependencies arising from distributed resources. In order to build a distributed application, the developer generally must know the exact interface of each distributed software component, identify what lookup service is required to locate each component, adjust for the specific implementation type of each component, and bridge differences in communications and other infrastructure characteristics between the various distributed components. The developer also generally must know the exact formats and structures of data throughout the distributed environment. Adding to the burden, related information is often fragmented across different repositories. Each repository typically has a unique connectivity and query interface. Using distributed data forces the application developer into many tasks of data manipulation and management not central to the primary task of implementing custom application functionality.
The most common conventional solutions to deal with the distributed computing problem include custom development and middleware. Custom developed code tends to be costly, inflexible, difficult to maintain, and time consuming. Developers can easily spend more energy on building linkages between resources than on developing application functionality. Although middleware can in certain situations provide relatively reliable communication between applications, managed software components, and other system components, middleware generally does not address problems related to resource dependency.